Когда ты в браузере открываешь
http://localhost:8080 идёт запрос на сервер.
Создается объект запроса http.IncomingMessage и объект ответа http.ServerResponse:
http.createServer(function (req, res) {
// req - http.IncomingMessage, для того чтобы получить информацию по запросу
// res - http.ServerResponse, для того чтобы вернуть ответ
});
В объекта http.IncomingMessage есть свойство url которое содержит в себе URL

по которому ты обратился.
Если ты запросил
http://localhost:8080 - URL будет '/',
если
http://localhost:8080/login - '/login',
если
http://localhost:8080/products/update?id=10 - '/products/update?id=10'.
Мы проверяем какой URL у запроса и в зависимости от этого по разному отвечаем. Для '/' мы просто вернем html страничку:
if ( req.url === '/' ) {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.end( html );
}
Во всех остальных случаях мы будем возвращать просто текст.
Когда ты делаешь AJAX запрос ты указываешь адрес куда нужно сделать запрос:
xhr.open('GET', 'proj1.js', true);
В твоем случае ты просто указал 'proj1.js' и браузер сам сформирует адрес. Он возьмет текущий адрес, что в адресной строке, в твоем случае это
http://localhost:8080 и добавит proj1.js.
Так что твой код делает AJAX запрос на
http://localhost:8080/proj1.js.
Сервер видит что запрос не на '/', а на '/proj1.js' и отдает текст.
Надеюсь я понятно расписал
